// middieware/jwt.go
package middieware

import (
	"time"
	"xiaomi_demo/pkg/utils"

	"github.com/gin-gonic/gin"
)

func JWT() gin.HandlerFunc {
	return func(c *gin.Context) {
		code := 200
		token := c.GetHeader("Authorization") // 从HTTP请求的头部获取名为"Authorization"的值，这通常是JWT存放的地方
		if token == "" {
			code = 404
		} else {
			claim, err := utils.ParseToken(token)
			if err != nil {
				code = 403 // 无权限，token是无权的，是假的
			} else if time.Now().Unix() > claim.ExpiresAt {
				code = 401 // Token无效
				// JWT解析成功，但当前时间已经超过了claim.ExpiresAt（即token已过期）
			}
		}
		if code != 200 {
			c.JSON(200, gin.H{
				// map[string]interface{}的缩写
				"status": code,
				"msg":    "Token解析错误",
			})
			c.Abort() // 终止当前的请求处理流程
			return
		}
		c.Next() // 将请求传递给后续的中间件或路由处理函数
	}
}
